const schedule = require('node-schedule')
const fse = require('fs-extra')
const path = require('path')
const { sendEmail } = require('./util')
const moment = require('moment')

module.exports = {
  // 清除tmp文件夹中的内容任务
  clearTmpFile: (task) => {
    schedule.scheduleJob(task.id, task.cron_expression, () => {
      // 确保目录为空，如果目录不为空，则删除目录内容；如果该目录不存在，则创建该目录，目录本身不会被删除
      try {
        fse.emptyDirSync(path.join(__dirname, '../tmp'))
        // 追加相关日志内容到相关日志文件中
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.clearTmpFile - 启动任务：${task.name} 执行成功\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      } catch (error) {
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.clearTmpFile - 启动任务：${task.name} 执行失败 ${error.message}\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      }
    })
  },
  // 清除log日志文件夹中的日志内容任务
  clearLogFile: (task) => {
    schedule.scheduleJob(task.id, task.cron_expression, () => {
      try {
        fse.emptyDirSync(path.join(__dirname, '../log'))
        // 追加相关日志内容到相关日志文件中
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.clearLogFile - 启动任务：${task.name} 执行成功\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      } catch (error) {
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.clearLogFile - 启动任务：${task.name} 执行失败 ${error.message}\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      }
    })
  },
  // 发送通知
  sendNotice: (task) => {
    schedule.scheduleJob(task.id, task.cron_expression, () => {
      try {
        sendEmail(task.name, task.email, task.content)
        // 追加相关日志内容到相关日志文件中
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.notification - 启动任务：${task.name} 执行成功\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      } catch (error) {
        let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.notification - 启动任务：${task.name} 执行失败 ${error.message}\n`
        fse.appendFileSync(path.join(__dirname, `../log/${task.id}.log`), log, 'utf-8')
      }
    })
  },
  cancel: (id) => {
    // 追加相关日志内容到相关日志文件中
    let log = `[${moment().format('YYYY-MM-DD HH:mm:ss')}] task.info - 取消任务\n`
    fse.appendFileSync(path.join(__dirname, `../log/${id}.log`), log, 'utf-8')
    schedule.cancelJob(id)
  }  
}
